Data Tidying
Humboldt-Universität zu Berlin
2024-07-09
Heute werden wir lernen…
Die vorgeschlagenen Ressourcen für dieses Thema sind
languageR_english.csv (im Ordner daten)df_eng <- read_csv(here("daten", "languageR_english.csv")) |>
1 clean_names() |>
2 arrange(word) |>
3 rename(
4 rt_lexdec = r_tlexdec,
5 rt_naming = r_tnaming
) |>
6 select(age_subject, word, word_category, rt_lexdec, rt_naming)janitor)
wort in ansteigender Reihenfolge anordnen (A-Z)
r_tlexdec in rt_lexdec umbenennen
r_tlexdec in rt_lexdec umbenennen
Abbildung 1: A model of the data science process from Wickham et al. (2023) (all rights reserved)
readr::read_csv)dplyr)ggplot)tidyr) noch nicht durchführencountry)year)population)cases)| country | year | cases | population |
|---|---|---|---|
| Afghanistan | 1999 | 745 | 19987071 |
| Afghanistan | 2000 | 2666 | 20595360 |
| Brazil | 1999 | 37737 | 172006362 |
| Brazil | 2000 | 80488 | 174504898 |
| China | 1999 | 212258 | 1272915272 |
| China | 2000 | 213766 | 1280428583 |
| country | year | type | count |
|---|---|---|---|
| Afghanistan | 1999 | cases | 745 |
| Afghanistan | 1999 | population | 19987071 |
| Afghanistan | 2000 | cases | 2666 |
| Afghanistan | 2000 | population | 20595360 |
| Brazil | 1999 | cases | 37737 |
| Brazil | 1999 | population | 172006362 |
| Brazil | 2000 | cases | 80488 |
| Brazil | 2000 | population | 174504898 |
| China | 1999 | cases | 212258 |
| China | 1999 | population | 1272915272 |
| China | 2000 | cases | 213766 |
| China | 2000 | population | 1280428583 |
| country | year | rate |
|---|---|---|
| Afghanistan | 1999 | 745/19987071 |
| Afghanistan | 2000 | 2666/20595360 |
| Brazil | 1999 | 37737/172006362 |
| Brazil | 2000 | 80488/174504898 |
| China | 1999 | 212258/1272915272 |
| China | 2000 | 213766/1280428583 |
Abbildung 2: Image source: Wickham et al. (2023) (all rights reserved)
“Glückliche Familien sind alle gleich; jede unglückliche Familie ist auf ihre eigene Art unglücklich.”
— Leo Tolstoy
“‘Tidy’ Datensätze sind alle gleich, aber jeder ‘untidy’ Datensatz ist auf seine eigene Weise unordentlich.”
— Hadley Wickham
Die Arbeit mit aufgeräumten Daten hat zwei wesentliche Vorteile:
tidyverse sind darauf ausgelegt, mit aufgeräumten Daten zu arbeiten (z.B. ggplot2 und dplyr)tidyverseDas Paket tidyr (aus tidyverse) hat zwei nützliche Funktionen zum Transponieren unserer Daten:
pivot_longer(): macht breite Daten längerpivot_wider(): lange Daten breiter machenAbbildung 3: die berühmteste Verwendung des Wortes Pivot (zumindest für Millenials) (Friends)
Wir müssen oft zwischen breiten und langen Datenformaten konvertieren, um verschiedene Arten von Zusammenfassungen oder Visualisierungen zu erstellen
breite Daten: alle Beobachtungen zu einer Sache befinden sich in einer einzigen Zeile
lange Daten: jede Beobachtung befindet sich in einer separaten Zeile
Beginnen wir mit dem typischsten Fall: Umwandlung breiter Daten in lange Daten
pivot_longer()languageR_english.csv (df_eng)
age_subject gibt an, ob eine Beobachtung von einem Teilnehmer der Altersgruppe old oder young stammtword und word_category beschreiben Eigenschaften des Stimulus für eine bestimmte Beobachtung (d. h. das Wort)rt_lexdec enthält die Reaktionszeit für eine lexikalische Entscheidungsaufgabert_naming enthält die Antwortzeit für eine Wortbenennungsaufgabehead(df_eng)| age_subject | word | word_category | rt_lexdec | rt_naming |
|---|---|---|---|---|
| young | ace | N | 623.61 | 456.3 |
| old | ace | N | 775.67 | 607.8 |
| young | act | V | 617.10 | 445.8 |
| old | act | V | 715.52 | 639.7 |
| young | add | V | 575.70 | 467.8 |
| old | add | V | 742.19 | 605.4 |
Abbildung 4: Our plot to be reproduced
rt_lexdec und rt_naming erscheinen in Facetten
facet_wrap() nimmt eine kategorische Variable als Argument und erzeugt eine Facette für jede Kategorielexdec und naming enthält
pivot_longer()pivot_longer() (von tidyr) konvertiert eine breite Datentabelle in ein längeres Format
1df_eng_long <-
2 df_eng %>%
3 pivot_longer(
4 cols = starts_with("rt_"),
5 names_to = "response",
6 values_to = "time"
)df_eng_long, das…
df_eng, und dann
col =) nimmst, die mit rt_ beginnen
response erstellen, die die Namen aus cols enthält (names_to =)
time erstellen, die die Werte aus cols enthält (values_to =)
ace und act in
df_eng
| age_subject | word | rt_lexdec | rt_naming |
|---|---|---|---|
| young | ace | 623.61 | 456.3 |
| old | ace | 775.67 | 607.8 |
| young | act | 617.10 | 445.8 |
| old | act | 715.52 | 639.7 |
df_eng |> pivot_longer(...)
| age_subject | word | response | time |
|---|---|---|---|
| young | ace | rt_lexdec | 623.61 |
| young | ace | rt_naming | 456.30 |
| old | ace | rt_lexdec | 775.67 |
| old | ace | rt_naming | 607.80 |
| young | act | rt_lexdec | 617.10 |
| young | act | rt_naming | 445.80 |
| old | act | rt_lexdec | 715.52 |
| old | act | rt_naming | 639.70 |
rt_lexdecrt_namingage_subject auf der x-Achsetime auf der y-Achseresponse in FacettenAbbildung 5: Response times per age group for the lexical decision task vs. naming task
Aufgabe 1: Tidy data
Beispiel 1
Abbildung 5 neu erstellen.
pivot_wider()tidyr-Funktion pivot_wider() macht Datensätze breiter, indem sie Spalten vergrößert und Zeilen reduziert.
df_eng breiter zu machen
young Probanden und die Antwort des old Probandenpivot_wider()pivot wider nimmt ähnliche Argumente wie pivot_longer(), mit einigen leichten Unterschieden:
id_cols (optional): identifizierende Spalten (welche Spalten identifizieren jede Beobachtung eindeutig?)names_from: wie soll die neue Spalte heißen, die die vorherigen Spaltennamen enthält (muss eine kategorische Variable sein)?names_prefix (optional): Präfix für die neuen Spaltennamen (optional)values_von: neue Spaltenwerteage_subject und ihre Werte von rt_lexdec übernehmendf_eng_wide <-
df_eng %>%
select(-rt_naming) |>
pivot_wider(
1 names_from = age_subject,
2 values_from = rt_lexdec,
3 names_prefix = "lexdec_"
)age_subject erstellen
rt_lexdec
lexdec_ am Anfang der neuen Spaltennamen
ace und act in
df_eng
| age_subject | word | word_category | rt_lexdec |
|---|---|---|---|
| young | ace | N | 623.61 |
| old | ace | N | 775.67 |
| young | act | V | 617.10 |
| old | act | V | 715.52 |
df_eng_wide
| word | word_category | lexdec_young | lexdec_old |
|---|---|---|---|
| ace | N | 623.61 | 775.67 |
| act | V | 617.10 | 715.52 |
rt_naming entfernt, weil es auch einen eindeutigen Wert pro Wort pro Altersgruppe hatNA-Werte für lexdec_young für alte Themen und NA-Werte für lexdec_old für junge Themen ein| word | word_category | rt_naming | lexdec_young | lexdec_old |
|---|---|---|---|---|
| ace | N | 456.3 | 623.61 | NA |
| ace | N | 607.8 | NA | 775.67 |
| act | V | 445.8 | 617.10 | NA |
| act | V | 639.7 | NA | 715.52 |
Heute haben wir gelernt…
Anhang 2 auf der Website des Kurses.
Hergestellt mit R version 4.4.0 (2024-04-24) (Puppy Cup) und RStudioversion 2023.9.0.463 (Desert Sunflower).
R version 4.4.0 (2024-04-24)
Platform: aarch64-apple-darwin20
Running under: macOS Ventura 13.2.1
Matrix products: default
BLAS: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib; LAPACK version 3.12.0
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
time zone: Europe/Berlin
tzcode source: internal
attached base packages:
[1] stats graphics grDevices datasets utils methods base
other attached packages:
[1] janitor_2.2.0 here_1.0.1 lubridate_1.9.3 forcats_1.0.0
[5] stringr_1.5.1 dplyr_1.1.4 purrr_1.0.2 readr_2.1.5
[9] tidyr_1.3.1 tibble_3.2.1 ggplot2_3.5.1 tidyverse_2.0.0
loaded via a namespace (and not attached):
[1] utf8_1.2.4 generics_0.1.3 renv_1.0.7 xml2_1.3.6
[5] stringi_1.8.3 hms_1.1.3 digest_0.6.35 magrittr_2.0.3
[9] evaluate_0.23 grid_4.4.0 timechange_0.3.0 fastmap_1.1.1
[13] rprojroot_2.0.4 jsonlite_1.8.8 fansi_1.0.6 viridisLite_0.4.2
[17] scales_1.3.0 cli_3.6.2 rlang_1.1.3 crayon_1.5.2
[21] bit64_4.0.5 munsell_0.5.1 withr_3.0.0 yaml_2.3.8
[25] tools_4.4.0 parallel_4.4.0 tzdb_0.4.0 colorspace_2.1-0
[29] pacman_0.5.1 kableExtra_1.4.0 png_0.1-8 vctrs_0.6.5
[33] R6_2.5.1 magick_2.8.3 lifecycle_1.0.4 snakecase_0.11.1
[37] bit_4.0.5 vroom_1.6.5 pkgconfig_2.0.3 pillar_1.9.0
[41] gtable_0.3.5 Rcpp_1.0.12 glue_1.7.0 systemfonts_1.0.6
[45] highr_0.10 xfun_0.43 tidyselect_1.2.1 rstudioapi_0.16.0
[49] knitr_1.46 farver_2.1.1 htmltools_0.5.8.1 labeling_0.4.3
[53] svglite_2.1.3 rmarkdown_2.26 compiler_4.4.0
Woche 9 - Data Tidying